/* 关于 JavaScript 回调 */

const arr = ['1', '5', '10', '21'];
// parseInt() 用作 Array.prototype.map() 的回调
// parseInt() 最多接受两个参数：string 要解析的 radix 参数和可选参数。
// Array.prototype.map() 将三个参数传递给回调：value、index 和 array。
// 作为基数参数传递的每个元素的索引导致了这个奇怪的问题
arr.map(parseInt); // [1, NaN, 2, 7]
// 正确
const arrCorrect = ['1', '5', '10', '21'];
arrCorrect.map(num => parseInt(num, 10)); // [1, 5, 10, 21]

// 在使用第三方库和 API 时，最好创建一个函数来将数据传递给正在使用的 API 的任何部分，而不是直接将其用作回调。
// 这样做的原因是，即使库或 API 现在可能不需要任何额外的参数，这可能会在以后的版本中改变，在更新到标记为没有重大更改的库的新版本。
// third-party-lib@v1.0.0
const parseData = path => {
  const fileData = fs.readFileSync(path);
  return fileData || '';
 };
 
 const importantFiles = ['id-card.txt', 'bank-number.txt'];
 const a = importantFiles.map(parseData); // Works fine
 console.log(a);
 
 // third-party-lib@v1.1.0 - No breaking changes!
 const parseData2 = (path, purge) => {
  const fileData = fs.readFileSync(path);
  if (purge) fs.unlinkSync(path);
  return fileData || '';
 };
 
 const importantFiles2 = ['id-card.txt', 'bank-number.txt'];
 const b = importantFiles2.map(parseData2); // 'bank-number.txt'` has been deleted
 console.log(b);
